package org.abadirou.cdebacker.flst;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import org.abadirou.cdebacker.flst.api.Personne;
import org.abadirou.cdebacker.flst.api.dao.PersonneDao;
import org.abadirou.cdebacker.flst.entity.PersonneImpl;

import com.google.inject.Inject;
import com.google.inject.Singleton;

@SuppressWarnings("unchecked")
@Singleton
public class JPAPersonneDao implements PersonneDao {

	@Inject
	private EntityManager em;

	@Override
	public void saveEntry(Personne personne) {
		EntityTransaction tx = em.getTransaction();

		tx.begin();
		em.persist(personne);
		tx.commit();
	}

	@Override
	public Personne createPersonne(String string) {
		return new PersonneImpl(string);
	}

	@Override
	public PersonneImpl get(Long id) {
		return em.find(PersonneImpl.class, id);
	}

	@Override
	public Personne getPersonne(String nom) {
		Query query = em.createNamedQuery(PersonneImpl.PERSONNE_BY_NAME);

		return (Personne) query.setParameter("nom", nom).getSingleResult();
	}

	@Override
	public List<Personne> getAllPersonne() {
		return em.createNamedQuery(PersonneImpl.ALL_PERSONNE).getResultList();
	}

	@Override
	public void removePersonne(Personne personne) {
		em.getTransaction().begin();
		em.remove(personne);
		em.getTransaction().commit();
	}

}
